home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #2 / Amiga Plus CD - 1999 - No. 2.iso / System-Boost / Workbench / BackClock / sources / obp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-11-09  |  1.8 KB  |  71 lines

  1. /*****************************************************************************
  2.  * 
  3.  * name                    : obp.c
  4.  * description            : pens handling
  5.  * version                : 1.2
  6.  *
  7.  * created                : 13-03-98
  8.  * last change            : 16-08-98
  9.  *
  10.  * V1.2:    free_twin() bug fixed
  11.  *
  12.  *****************************************************************************
  13.  */
  14. #include <intuition/intuition.h>
  15. #include <intuition/screens.h>
  16. #include <graphics/view.h> 
  17.  
  18. #include <proto/intuition.h>
  19. #include <proto/graphics.h>
  20. #include <proto/exec.h>
  21.  
  22. #include "obp.h"
  23. #include "utils.h"
  24.  
  25. void setColors(idWin * prj) {
  26.   int i ;
  27.   prj->wb = LockPubScreen("Workbench") ;
  28.   for(i=0; i<NUM_COLORS; i++)
  29.     freePen(prj, prj->backWin.cmap[i].reg) ;
  30.   
  31.   initColors(prj) ;
  32.   free_twin(prj) ;
  33.   initwin(prj) ;
  34.   if (prj->wb) UnlockPubScreen(NULL, prj->wb) ;
  35.   prj->lastError = OK ;
  36. }
  37.  
  38. void initColors(idWin * prj) {
  39.   int i ;
  40.   prj->wb = LockPubScreen("Workbench") ;
  41.   for(i=0; i<NUM_COLORS; i++) {
  42.     prj->backWin.cmap[i].reg = getPen(prj, prj->backWin.cmap[i].R,
  43.                                            prj->backWin.cmap[i].G,
  44.                                            prj->backWin.cmap[i].B) ;
  45.   }
  46.   if (prj->wb) UnlockPubScreen(NULL, prj->wb) ;
  47.   prj->lastError = OK ;
  48. }
  49.  
  50. ULONG getPen(idWin * prj, UBYTE R, UBYTE G, UBYTE B) {
  51.   LONG color ;
  52.   struct Screen   * wbscr ;
  53.   struct ColorMap * wbcm ;
  54.   
  55.   if (wbscr = prj->wb) {
  56.     wbcm = wbscr->ViewPort.ColorMap ;
  57.     if ((color = ObtainBestPen(wbcm, ((LONG)R<<24)|0xffffff, ((LONG)G<<24)|0xffffff, ((LONG)B<<24)|0xffffff, TAG_DONE)) >=0 ) {
  58.        prj->lastError = OK ;
  59.       
  60.     }else prj->lastError = ERRORNOMEM;  
  61.   }
  62.   return((ULONG)color) ;
  63. }
  64. void freePen(idWin * prj, ULONG reg) {
  65.   struct Screen   * wbscr ;
  66.   struct ColorMap * wbcm ;
  67.   if (wbscr = prj->wb) {
  68.     wbcm = wbscr->ViewPort.ColorMap ;
  69.     ReleasePen(wbcm, (LONG)reg) ;
  70.   }
  71. }